#include <iostream>
#include <vector>

using namespace std;

class Solution
{
public:
    static int longestOnes(vector<int> &nums, int k)
    {
        // 最初代码
        // int ret = 0;
        // int zero_num = 0;
        // int left = 0, right = 0;
        // // cout << "nums.size(): " << nums.size() << endl;
        // if(!nums[0]) zero_num++;
        // if(nums.size()==1 && k>0) ret = 1;
        // while (right < nums.size() - 1)
        // {
        //     // 进窗口
        //     // 判断
        //     // 出窗口
        //     // 更新结果
        //     while (zero_num <= k && right < nums.size() - 1)
        //     {
        //         if (!nums[++right])
        //             zero_num++;
        //         if(zero_num > k) break;
        //         // right++;
        //     }
        //     ret = max(ret, right - left);
        //     cout << "zero_num: " << zero_num << " left: " << left << " right: " << right << endl;
        //     cout << ret << endl;
        //     while (zero_num > k && left <= right)
        //     {
        //         if (!nums[left++])
        //             zero_num--;
        //     }
        //     cout << "zero_num: " << zero_num << " left: " << left << " right: " << right << endl;
        //     ret = max(ret, right - left + 1);
        //     cout << ret << endl;
        // }
        // return ret;
        //优化后代码
        int ret = 0;
        for(int left = 0, right = 0, zero_num = 0; right < nums.size(); right++)
        {
            if(!nums[right]) zero_num++;
            while(zero_num > k) 
                if(!nums[left++]) zero_num--;
            ret = max(ret, right-left+1);
        }
        return ret;
    }
};

int main()
{
    // vector<int> vc = {1,1,1,0,0,0,1,1,1,1,0};
    // int k = 2;
    vector<int> vc = {0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1};
    int k = 3;
    cout << Solution::longestOnes(vc, k) << endl;
    return 0;
}